前言:
- 定义;
- 常用的元字符;
- 常用的限定符(量词);
- 分组;
- 正则高级 API(4个);
- r 的作用;
- 贪婪/非贪婪。
一、定义
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。
简而言之:正则表达式就是记录文本规则的代码。
特点:
操作字符串
1.更快的方式操作字符串;(表单校验,数据匹配…)
2.普通字符串操作无法做到的,或者很难做的正则很容易搞定!!!
使用场景:
1.表单校验
2.api 里面也需要正则
正则表达式代码体验
# Python 解释器为我们提供了一个使用正则的模块,这个模块叫做re(regex) |
二、常用的元字符
| 语法 | 说明 |
|---|---|
| . | 匹配除换行符(\n)以外的任意字符 |
| [] | 匹配 [ ] 中列举的字符 |
| \w 与 \W | 匹配字母或数字或下划线或汉字(单词) / 反义(非单词) |
| \s 与 \S | 匹配任意的空白符 / 反义(非空白) |
| \d 与 \D | 匹配数字 [0-9] / 反义(非数字) |
| \b 与 \B | 匹配单词的开始或结束 / 反义 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结束 |
代码演示:
# . 匹配任意1个字符(除了 \n) |
三、常用的限定符(量词)
| 语法 | 说明 | 备注 |
|---|---|---|
| * | 重复零次或更多次 | >=0 |
| + | 重复一次或更多次 | >=1 |
| ? | 重复零次或一次 | 0 or 1 |
| {n} | 重复n次 | ==n |
| {n,} | 重复n次或更多次 | >=n |
| {n,m} | 重复n到m次 | n<=X<=m |
代码演示:
# * 匹配前一个字符出现0次或者无限次,即可有可无 (>=0) |
案例:
1.校验手机号
import re |
2.校验邮箱
import re |
四、分组
用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作。
| 语法 | 说明 |
|---|---|
| (abc) | 将括号中字符作为一个分组 |
| 竖线 | 匹配左右任意一个表达式 |
| \num | 引用分组num匹配到的字符串 |
| (?P |
分组起别名 |
| (?P=name) | 引用别名为name分组匹配到的字符串 |
代码演示:
# (abc) 将括号中字符作为一个分组 |
五、正则高级 API(4个)
| 语法 | 说明 |
|---|---|
| search() | 搜索字符串中符合正则表达式的内容 -> 只返回第一个 |
| findall() | 搜索字符串中符合正则表达式的内容 -> 返回一个列表 |
| sub() | 替换字符串中符合正则的内容 -> 替换后的字符串 |
| split() | 按照指定正则切割字符串 -> 返回列表 |
代码演示:
import re |
六、r 的作用
让程序把正则直接当做正则看;(不是从字符串开始解释)
# c:\aaa\bbb\ccc |
七、贪婪/非贪婪
贪婪:(量词在自己的范围内,取最多…)
非贪婪:(量词在自己的范围内,取最少… )
非贪婪用法:量词后面加?
print('贪婪', re.match(r'a+', 'aaa').group()) # -> aaa |
更多参考内容: http://deerchao.net
